/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tesis.service.impl;

import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tesis.common.utils.ConvertBeanUtil;
import tesis.domain.MapaSincronizado;
import tesis.dto.in.*;
import tesis.dto.out.FormDTO;
import tesis.service.AplicacionClienteService;
import tesis.util.MotorInvoker;
import tesis.utils.PropertyUtils;

/**
 *
 * @author hugo
 */
@Transactional
@Service("aplicacionClienteService")
public class AplicacionClienteServiceImpl implements AplicacionClienteService{
    
      
    private final static Logger LOG= LoggerFactory.getLogger(AplicacionClienteServiceImpl.class);
    
    private  final static String  url=PropertyUtils.getAppProperty("url.motor");
    
    
    
    public  ListInstanciaEstacionDTO getInstanciEstacionByUsuario(AplicacionClienteDTO aplicacionCliente){
        ListInstanciaEstacionDTO bean = null;
        try{
            bean = MotorInvoker.getInstanciaEstacion(url, aplicacionCliente);
        }catch(RuntimeException ex){
         LOG.error("Error al obtener las instancias de estacion:" + ex);
        }
        
        return bean;
    }
    
    public  List<EstadoInstanciaEstacionDTO> getEstadoInstanciaEstacion(){
        ListEstadoInstanciaEstacionDTO bean = null;
        try{
            bean = MotorInvoker.getEstadoInstanciaEstacionDTO(url);
        }catch(RuntimeException ex){
            LOG.error("Error al obtener los estados de la instancias de una estacion: " + ex);
        }
        
        return bean.getLstEstadoInstanciaEstacionDTO();
    }
    
    
    public ListProcesoDTO getProcesosDTOByUser(AplicacionClienteDTO aplicacionCliente){
        ListProcesoDTO bean = new ListProcesoDTO();
        try{
            bean = MotorInvoker.getProcesosAsignadoByUser(url, aplicacionCliente);
            
        }catch(RuntimeException ex){
            LOG.error("Error al obtener los procesos asignados del usuario: " + aplicacionCliente.getIdUsuarioDTO() + " Ex: " + ex);
        }
        return bean;
    }
    
    
    @Override
    public  InstanciaEstacionDTO getInstanciaEstacion(Integer idinstanciaestacion){
        InstanciaEstacionDTO bean = new InstanciaEstacionDTO();
        try{
            bean = MotorInvoker.getInstanciaEstacion(url, idinstanciaestacion);
            
        }catch(RuntimeException ex){
            LOG.error("Error al obtener la instancia estacion : " + idinstanciaestacion + " Ex: " + ex);
        }
        return bean;
    }
    
    
    public InstanciaEstacionDTO getPrimeraEstacion(Integer idProceso){
        
        InstanciaEstacionDTO bean = new InstanciaEstacionDTO();
        try{
            bean = MotorInvoker.getPrimeraInstanciaEstacion(url,idProceso);
        }catch(RuntimeException ex){
            LOG.equals("Error al obtener la primera instancia de esacion, Idproceso: " + idProceso + "EX: " + ex );
        }
        return bean;
    }
    
    @Override
    public MapaSincronizadoDTO findMapaById(Integer id) {
       MapaSincronizadoDTO result=new MapaSincronizadoDTO();
       
       try{
           result=MotorInvoker.getMapaById(url, id);
           LOG.info("Mapa obtenido correctamente");
       }catch(RuntimeException ex){
           LOG.error("Error al obtener mapa");
           throw ex;
       }
       return result;
    }

    @Override
    public InstanciaProcesoDTO getInstanciaProceso(Integer idInstanciaProceso) {
        InstanciaProcesoDTO procesoDTO=null;
        try{
            procesoDTO=MotorInvoker.getInstanciaProceso(url, idInstanciaProceso);
        }catch(RuntimeException ex){
             LOG.error("Error al obtener proceso: "+ex);
             throw ex;
        }
        return procesoDTO;
    }

    @Override
    public FormDTO getMapaValores(Integer idInstanciaProceso) {
        FormDTO formDTO=null;
        try{
            formDTO=MotorInvoker.getValoresParametros(url, idInstanciaProceso);
        }catch(RuntimeException ex){
             LOG.error("Error al obtener valores historicos de proceso: "+ex);
             throw ex;
        }
        return formDTO;
    }

    
    
    
}
